package com.ruoyi.mhrb.custom.Payservice;

import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.common.utils.sign.Md5Utils;
import com.ruoyi.mhrb.custom.constant.EPayWay;
import com.ruoyi.mhrb.custom.model.PayResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

@Service
public class CustomPayService {

    // auto private

    @Value("${mhrb.pay.url}")
    private String url;

    @Value("${mhrb.pay.pid}")
    private Integer pid;

    @Value("${mhrb.pay.key}")
    private String key;

    @Value("${mhrb.pay.notify_url}")
    private String notifyUrl;

    @Value("${mhrb.pay.return_url}")
    private String returnUrl;


    public  PayResult getPayUrl(String name,String money ,String orderNum) {
        List<List<String>> params = new ArrayList<>();

        // IP
        String ipAddr = IpUtils.getIpAddr();
        List<String> clientIp = new ArrayList<>(2);
        clientIp.add("clientip");
        clientIp.add(ipAddr);
        params.add(clientIp);

        // 设备 pC
        List<String> device = new ArrayList<>(2);
        device.add("device");
        device.add("pc");
        params.add(device);

        // 金额
        List<String> moneys = new ArrayList<>(2);
        moneys.add("money");
        moneys.add(money);
        params.add(moneys);

        // 商品名字
        List<String> names = new ArrayList<>(2);
        names.add("name");
        names.add(name);
        params.add(names);

        // 通知
        List<String> notifyUrls = new ArrayList<>(2);
        notifyUrls.add("notify_url");
        notifyUrls.add(notifyUrl);
        params.add(notifyUrls);

        // 商品订单号
        List<String> orderNums = new ArrayList<>(2);
        orderNums.add("out_trade_no");
        orderNums.add(orderNum);
        params.add(orderNums);


        // 商户id
        List<String> param = new ArrayList<>(2);
        param.add("param");
        param.add(orderNum);
        params.add(param);

        // 商户id
        List<String> pids = new ArrayList<>(2);
        pids.add("pid");
        pids.add(pid.toString());
        params.add(pids);

        // 返回
        List<String> returnUrls = new ArrayList<>(2);
        returnUrls.add("return_url");
        returnUrls.add(returnUrl);
        params.add(returnUrls);

        // 支付方式
        List<String> types = new ArrayList<>(2);
        types.add("type");
        types.add(EPayWay.WX.getKey());
        params.add(types);

        String collect = params.stream().map(e -> String.join("=", e)).collect(Collectors.joining("&"));
        String hash = Md5Utils.hash(collect +key);

        String p =  collect + "&sign_type=MD5&sign=" + hash;
        String s = HttpUtils.sendPost(url, p);
        return getPayResult(s);
    }

    /**
     * 解析返回
     */

    public static PayResult getPayResult(String s) {
       return JSON.parseObject(s,PayResult.class);
    }

}
